/**
 * hooks小结
 * 1. 什么是hooks
 *    给函数组件提供 状态，生命周期
 *
 * 2. useState() - 提供状态
 *    语法： const [count,setCount] = useState(初始值)
 *    注意事项：
 *       1. useState 可以多次调用，从而定义多个状态
 *       2. 可以声明任意类型数据(字符串，数组，对象等)
 *       3. 修改时，遵循 setState 规则： 新值覆盖旧指
 *    语法规范：
 *    [状态名, set状态名大写] = useState(初始值)
 *
 *    useState 使用限制：
 *      1. 不能写在 if/for/嵌套等语句中
 *         因为内部是按顺序调用的，要保证调用顺序
 *      2. 不能在非 React 函数中调用
 *          1. 组件函数 - 可以使用
 *          2. useXxxx - 可以使用
 *          ❌其他的(普通函数)都不行
 *
 *  3. useEffect - 模拟生命周期( componentDidMount、componentDidUpdate、componentWillUnmount)
 *  语法： useEffect(回调函数, [依赖项1,依赖项2...])
 *
 *      1. 挂载时: 依赖项给空数据，useEffect(()=>{}, [])
 *          场景： 发送请求，获取DOM,绑定事件，定时器等
 *      2. 更新时：依赖项写依赖项, useEffect(()=>{}, [msg,count])
 *          场景： 监听数据变化，本地存储
 *      3. 销毁时：回调函数中，返回函数
 *          场景： 把页面的绑定事件移除，移除定时器等
 *
 *  注意事项：
 *      1. useEffect 可以多次调用，从而执行各种业务
 *  建议：按照业务功能划分，相同的功能就写在同一个 useEffect 中
 */
